package com.yupi.yuoj.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import lombok.Data;

/**
 * 学习内容表
 * @TableName content
 */
@TableName(value ="content")
@Data
public class Content {
    /**
     * 内容ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 创建用户ID
     */
    @TableField(exist = false)
    private Long userId;

    /**
     * 内容标题
     */
    private String title;

    /**
     * 内容描述
     */
    private String description;

    /**
     * 文章正文内容
     */
    private String content_text;

    /**
     * 内容正文（别名）
     */
    @TableField(exist = false)
    private String content;

    /**
     * 视频链接
     */
    private String video_url;

    /**
     * 封面图片链接
     */
    private String poster_url;

    /**
     * 缩略图链接
     */
    private String thumbnail_url;

    /**
     * 内容分类：cognition-认知提升，fitness-身体健身，learning-学习方法
     */
    private String category;

    /**
     * 子分类：如思维模型、训练计划、记忆技巧等
     */
    private String sub_category;

    /**
     * 内容类型：article-文章，video-视频
     */
    private String content_type;

    /**
     * 内容类型（别名）
     */
    @TableField(exist = false)
    private String type;

    /**
     * 难度等级：beginner-入门，intermediate-中级，expert-专家
     */
    private String difficulty;

    /**
     * 内容时长（分钟），视频必填
     */
    private Integer duration;

    /**
     * 标签列表，JSON数组格式
     */
    private Object tags;

    /**
     * 作者名称
     */
    private String author;

    /**
     * 浏览次数
     */
    private Integer view_count;

    /**
     * 浏览次数（别名）
     */
    @TableField(exist = false)
    private Integer viewNum;

    /**
     * 点赞数
     */
    private Integer like_count;

    /**
     * 点赞数（别名）
     */
    @TableField(exist = false)
    private Integer likeNum;

    /**
     * 收藏数
     */
    private Integer collect_count;

    /**
     * 收藏数（别名）
     */
    @TableField(exist = false)
    private Integer collectionNum;

    /**
     * 评论数
     */
    private Integer comment_count;

    /**
     * 评论数（别名）
     */
    @TableField(exist = false)
    private Integer commentNum;

    /**
     * 状态：0-草稿，1-已发布，2-已下架
     */
    private Integer status;

    /**
     * 是否精选：0-否，1-是
     */
    private Integer is_featured;

    /**
     * 是否免费：0-会员专享，1-免费
     */
    private Integer is_free;

    /**
     * 排序权重，数值越大越靠前
     */
    private Integer sort_order;

    /**
     * 发布时间
     */
    private Date publish_time;

    /**
     * 创建时间
     */
    private Date create_time;

    /**
     * 更新时间
     */
    private Date update_time;

    /**
     * 是否删除：0-否，1-是
     */
    private Integer is_delete;

    // 自定义 setter 方法来同步数据
    public void setContent(String content) {
        this.content = content;
        this.content_text = content;
    }

    public void setType(String type) {
        this.type = type;
        this.content_type = type;
    }

    public void setViewNum(Integer viewNum) {
        this.viewNum = viewNum;
        this.view_count = viewNum;
    }

    public void setLikeNum(Integer likeNum) {
        this.likeNum = likeNum;
        this.like_count = likeNum;
    }

    public void setCollectionNum(Integer collectionNum) {
        this.collectionNum = collectionNum;
        this.collect_count = collectionNum;
    }

    public void setCommentNum(Integer commentNum) {
        this.commentNum = commentNum;
        this.comment_count = commentNum;
    }

    // 自定义 getter 方法来同步数据
    public String getContent() {
        return this.content_text != null ? this.content_text : this.content;
    }

    public String getType() {
        return this.content_type != null ? this.content_type : this.type;
    }

    public Integer getViewNum() {
        return this.view_count != null ? this.view_count : this.viewNum;
    }

    public Integer getLikeNum() {
        return this.like_count != null ? this.like_count : this.likeNum;
    }

    public Integer getCollectionNum() {
        return this.collect_count != null ? this.collect_count : this.collectionNum;
    }

    public Integer getCommentNum() {
        return this.comment_count != null ? this.comment_count : this.commentNum;
    }
}